阅读:1885 回复:4
kavoe
13

帖子

32

跟帖

912

积分

高级榴莲
高级榴莲

请教大家,流程修改后,正在走的流程如何按新的流程执行

楼主#
更多 发布于:2018-10-26 11:29
java10.5版本,oracle数据库,windows系统
客户的需求如题,就是想在流程修改后,已经启动了的流程按新的流程执行。


我给客户的答复是可以修改数据库里流程里的版本号,但如果有添加字段、删除字段之类的可能会导致错误,都要手工修改。
客户表示如果手工修改也可以接受。


请问大家,,如果要手工修改,修改什么表,那些字段,运行的错误在哪里能看到,告诉我方法就行
客户也做过开发,能力很强。
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲
1楼#
发布于:2018-10-26 14:49
.net版本下 改ot_instancecontext、ot_workitem及补充该流程的业务数据。最后还要重启引擎清除缓存或者将该流程实例先取消,再重新激活也可清除缓存。
kavoe
13

帖子

32

跟帖

912

积分

高级榴莲
高级榴莲
2楼#
发布于:2018-10-27 09:14
谢谢,java版本也一样吗?
武汉技术支持团队
40

帖子

1181

跟帖

3860

积分

论坛版主
论坛版主
3楼#
发布于:2018-10-28 17:18
Java我以前写过一个webservice接口,发出来参考一下



public String UpdateVersions(String WorkflowSelector, String CurrentVersion, String ToUpdateVersion,
String CreatedTime) throws Exception {
 // TODO Auto-generated method stub
 try {
String Msg = "";
String sql = String.format(
 "select ObjectID,SequenceNo from OT_InstanceContext where WorkflowCode='%s' and WorkflowVersion='%s' and CreatedTime > to_date('%s','yyyy-MM-dd')",
WorkflowSelector, CurrentVersion, CreatedTime);
DataTable dt = getEngine().getPortalQuery().QueryTable(sql);
 if (dt != null && dt.getRows().size() > 0) {
 for (int i = 0; i < dt.getRows().size(); i++) {
DataRow dr = dt.getRows().get(i);
String ObjectID = dr.getString("ObjectID");
String sql1 = String.format("update OT_InstanceContext set WorkflowVersion='%s' where ObjectID='%s'",
ToUpdateVersion, ObjectID);
 int result1 = getEngine().getPortalQuery().ExcuteNoQuery(sql1);
 if (result1 > 0) {
getEngine().getInstanceManager().ReloadInstance(ObjectID);
getEngine().getBizObjectManager().ReloadBizObject(WorkflowSelector, ObjectID);
 continue;
}
Msg += "流水号[" + dr.getString("SequenceNo") + "]:更新失败\n";
}
 if (Msg.length() > 0) {
 return Msg;
}
 return "更新成功!";

}else {
 return "没有该流程模板、流程版本的实例!";
}
}catch(Exception e) {
 return "系统异常,请联系技术人员!";
}
}
kavoe
13

帖子

32

跟帖

912

积分

高级榴莲
高级榴莲
4楼#
发布于:2018-11-02 07:58
thanks
游客

返回顶部